<interface>
<template class="ExtensionRow" parent="AdwActionRow">
<property name="activatable-widget">switch</property>
+ <binding name="title">
+ <lookup name="name" type="Extension">
+ <lookup name="extension" type="ExtensionRow"/>
+ </lookup>
+ </binding>
<child type="suffix">
<object class="GtkMenuButton" id="errorButton">
- <property name="visible">false</property>
<property name="valign">center</property>
<property name="has-frame">false</property>
<property name="icon-name">dialog-error-symbolic</property>
+ <binding name="visible">
+ <lookup name="has-error" type="Extension">
+ <lookup name="extension" type="ExtensionRow"/>
+ </lookup>
+ </binding>
<accessibility>
<property name="label" translatable="yes">Error Details</property>
</accessibility>
<property name="tightening-threshold">300</property>
<property name="child">
<object class="GtkLabel" id="errorLabel">
+ <binding name="label">
+ <lookup name="error" type="Extension">
+ <lookup name="extension" type="ExtensionRow"/>
+ </lookup>
+ </binding>
<!-- Hack to make the screen reader read the label -->
<property name="selectable"
bind-source="errorPopover"
</child>
<child type="suffix">
<object class="GtkMenuButton" id="updatesButton">
- <property name="visible">false</property>
<property name="valign">center</property>
<property name="has-frame">false</property>
<property name="icon-name">software-update-available-symbolic</property>
+ <binding name="visible">
+ <lookup name="has-update" type="Extension">
+ <lookup name="extension" type="ExtensionRow"/>
+ </lookup>
+ </binding>
<accessibility>
<property name="label" translatable="yes">Updates Details</property>
</accessibility>
<property name="xalign">0</property>
<property name="wrap">True</property>
<property name="selectable">true</property>
+ <binding name="label">
+ <lookup name="description" type="Extension">
+ <lookup name="extension" type="ExtensionRow"/>
+ </lookup>
+ </binding>
</object>
</child>
<child>
<property name="visible">false</property>
<property name="xalign">0</property>
<property name="selectable">true</property>
+ <binding name="visible">
+ <lookup name="has-version" type="Extension">
+ <lookup name="extension" type="ExtensionRow"/>
+ </lookup>
+ </binding>
<style>
<class name="dim-label"/>
</style>
},
InternalChildren: [
'detailsPopover',
- 'descriptionLabel',
'versionLabel',
- 'errorLabel',
- 'errorButton',
- 'updatesButton',
'switch',
'actionsBox',
],
this._actionGroup.add_action_entries(actionEntries);
this._bindActionEnabled(actionEntries);
- this.title = extension.name;
+ this._extension.bind_property_full('version',
+ this._versionLabel, 'label',
+ GObject.BindingFlags.SYNC_CREATE,
+ (bind, source) => [true, _('Version %s').format(source)],
+ null);
- this._descriptionLabel.label = extension.description;
-
- this.connect('destroy', this._onDestroy.bind(this));
-
- this._extensionStateChangedId = this._app.extensionManager.connect(
- `extension-changed::${extension.uuid}`, () => this._updateState());
+ this._extension.connect('notify::state',
+ () => this._updateState());
this._updateState();
}
if (!action.enabled)
this._switch.active = state;
-
- this._updatesButton.visible = this._extension.hasUpdate;
- this._errorButton.visible = this._extension.hasError;
- this._errorLabel.label = this._extension.error;
-
- this._versionLabel.label = _('Version %s').format(this._extension.version);
- this._versionLabel.visible = this._extension.version !== '';
- }
-
- _onDestroy() {
- if (this._extensionStateChangedId)
- this._app.extensionManager.disconnect(this._extensionStateChangedId);
- delete this._extensionStateChangedId;
}
});